﻿#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
//int main()
//{
//	void (*signal(int, void(*)(int)))(int);
//    //signal是个函数的声明，signal函数的的第一个参数类型是int整形
//	//signal函数的第二参数是函数指针：void (*)(int);
//	//这个函数指针指向是参数是int整形类型，返回的参数也是void
//	//signal函数返回类型也是函数指针：void(*)(int) 
//	//这个函数指针指向是参数类型也是int，返沪类型也是void
//
//	return 0;
//}


//int add(int x, int y)
//{
//	return x + y;
//}
//
//int sub(int x, int y)
//{
//	return x - y;
//}
//
//int mull(int x, int y)
//{
//	return x * y;
//}
//
//int div(int x, int y)
//{
//	return x / y;
//}
//
////int (*pa[5])(int,int) = {add,sub,mul,div}; //pf是函数指针的数组
//
////int (*)(int,int) = add;  //



//
//int add(int x, int y)
//{
//	return x + y;
//}
//
//int sub(int x, int y)
//{
//	return x - y;
//}
//
//int mull(int x, int y)
//{
//	return x * y;
//}
//
//int div(int x, int y)
//{
//	return x / y;
//}
//int main()
//{
//	int(*arr[4])(int, int) = { add, sub, mull, div };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (int i = 0; i < sz; i++)
//	{
//		int ret = (arr[i])(5, 7);
//		printf("ret = %d\n", ret);
//	}
//	return 0;
//}



//可以尝试写写一个加减乘除计算机



//void menu()
//{
//	printf("**********************\n");
//	printf("*** 1.add   2.sub  ***\n");
//	printf("*** 3.mull  4.div  ***\n");
//	printf("**********************\n");
//}
//
//int add(int x, int y)
//{
//	return x + y;
//}
//
//int sub(int x, int y)
//{
//	return x - y;
//}
//
//int mull(int x, int y)
//{
//	return x * y;
//}
//
//int div(int x, int y)
//{
//	return x / y;
//}
//int main()
//{
//	int x, y;
//	int input = 0;
//	int ret = 0;
//	do
//	{   
//		menu();
//		printf("请输入想要的值\n");
//		scanf("%d",&input);
//		switch (input)
//		{
//		case 1:
//			printf("请输入俩个值：\n");
//			scanf("%d %d",&x,&y);
//			ret = add(x, y);
//			printf("ret = %d\n", ret);
//			break;
//		case 2:
//			printf("请输入俩个值：\n");
//			scanf("%d %d", &x, &y);
//			ret = sub(x, y);
//			printf("ret = %d\n", ret);
//			break;
//		case 3:
//			printf("请输入俩个值：\n");
//			scanf("%d %d", &x, &y);
//			ret = mull (x, y);
//			printf("ret = %d\n", ret);
//			break;
//		case 4:
//			printf("请输入俩个值：\n");
//			scanf("%d %d", &x, &y);
//			ret = div(x, y);
//			printf("ret = %d\n", ret);
//			break;
//		case 0:
//			printf("退出游戏\n");
//			break;
//		default:
//			printf("输入的有误，请重新输入\n");
//		}
//	} while (input);
//	return 0;
//}




//使⽤函数指针数组的实现：
 
//void menu()
//{
//	printf("**********************\n");
//	printf("*** 1.add   2.sub  ***\n");
//	printf("*** 3.mull  4.div  ***\n");
//	printf("**********************\n");
//}
//
//int add(int x, int y)
//{
//	return x + y;
//}
//
//int sub(int x, int y)
//{
//	return x - y;
//}
//
//int mull(int x, int y)
//{
//	return x * y;
//}
//
//int div(int x, int y)
//{
//	return x / y;
//}
//int main()
//{
//	int x, y;
//	int input = 0;
//	int ret = 0;
//	int(*parr[5])(int, int) = { NULL, add, sub, mull, div };  //函数指针的数组
//	int sz = sizeof(parr) / sizeof(parr[0]);
//	do
//	{   
//		menu();
//		printf("请输入想要的值：\n");
//		scanf("%d",&input);
//		if (input <= 4 && input >= 1)
//		{
//			printf("请输入俩个值：\n");
//			scanf("%d %d",&x,&y);
//			ret = (parr[input])(x, y);
//			printf("ret = %d\n",ret);
//		}
//		else if (input == 0)
//		{
//			printf("退出游戏\n");
//		}
//		else
//		{
//			printf("输入的有误，请重新输入:\n");
//		}
//	} while (input);
//	return 0;
//}


int add(int x, int y)
{
	return x + y;
}

int sub(int x, int y)
{
	return x - y;
}

int mull(int x, int y)
{
	return x * y;
}

int div(int x, int y)
{
	return x / y;
}

int main()
{
	int (*arr[4])(int, int) = { add, sub, mull, div };
	for (int i = 0; i < 4; i++)
	{
		int ret = (arr[i])(5, 7);
		printf("ret = %d\n", ret);
	}
	return 0;
}



